import { post, postWithQueryParams } from "@/api/request";

/**
 * 模型控制器 / 模型控制器创建模型
 * @param {object} data
 * @param {string} [data.key] 模型编码
 * @param {string} [data.name] 模型名称
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Model>}
 * @author 方昊
 */
export function modelerCreate(data, config) {
  return post("/modeler/create", data, config);
}

/**
 * 模型控制器 / 模型控制器删除流程实例
 * @param {object} params
 * @param {object} data
 * @param {string} params.modelId 模型id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 方昊
 */
export function modelerDelete(params, data, config) {
  return postWithQueryParams("/modeler/delete", params, data, config);
}

/**
 * 模型控制器 / 模型控制器部署模型
 * @param {object} params
 * @param {object} data
 * @param {string} params.modelId 模型id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 方昊
 */
export function modelerDeploy(params, data, config) {
  return postWithQueryParams("/modeler/deploy", params, data, config);
}

/**
 * 模型控制器 / 模型控制器查询模型
 * @param {object} data
 * @param {string} [data.key] 流程代码
 * @param {number} [data.length] 分页大小
 * @param {string} [data.name] 流程名称
 * @param {number} [data.pageIndex] 页码
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<Model>>}
 * @author 方昊
 */
export function modelerList(data, config) {
  return post("/modeler/list", data, config);
}

/**
 * 模型控制器 / 模型控制器发布流程
 * @param {object} params
 * @param {object} data
 * @param {string} params.modelId 模型id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 方昊
 */
export function modelerPublish(params, data, config) {
  return postWithQueryParams("/modeler/publish", params, data, config);
}

/**
 * 模型控制器 / 模型控制器撤销流程定义
 * @param {object} params
 * @param {object} data
 * @param {string} params.modelId 模型id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 方昊
 */
export function modelerRevokePublish(params, data, config) {
  return postWithQueryParams("/modeler/revokePublish", params, data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} Model
 * @property {string} category
 * @property {string} createTime
 * @property {string} deploymentId
 * @property {string} id
 * @property {string} key
 * @property {string} lastUpdateTime
 * @property {string} metaInfo
 * @property {string} name
 * @property {string} tenantId
 * @property {number} version
 */
